package com.ruoyi.project.system.service;

import java.util.List;

import com.ruoyi.framework.web.domain.TreeSelect;
import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.domain.SysOrganize;

/**
 * 组织结构Service接口
 * 
 * @author frank
 * @date 2024-08-26
 */
public interface ISysOrganizeService 
{
    /**
     * 查询组织结构
     * 
     * @param organizeId 组织结构主键
     * @return 组织结构
     */
    SysOrganize selectSysOrganizeByOrganizeId(String organizeId);
    /**
     * 校验组织名称是否唯一
     *
     * @param sysOrganize 部门信息
     * @return 结果
     */
    boolean checkOrganizeNameUnique(SysOrganize sysOrganize);

    /**
     * 是否存在组织结构子节点
     *
     * @param organizeId 组织结构ID
     * @return 结果
     */
    boolean hasChildByOrganizeId(String organizeId);

    /**
     * 查询组织下是否存在用户
     *
     * @param organizeId 组织机构ID
     * @return 结果 true 存在 false 不存在
     */
    boolean checkOrganizeExistUser(String organizeId);


    /**
     * 查询组织结构列表
     * 
     * @param sysOrganize 组织结构
     * @return 组织结构集合
     */
    List<SysOrganize> selectSysOrganizeList(SysOrganize sysOrganize);

    /**
     * 查询组织结构数表
     * @param sysOrganize
     * @return
     */
    List<TreeSelect> selectOrganizeTreeList(SysOrganize sysOrganize);

    /**
     * 根据角色ID查询部门树信息
     *
     * @param roleId 角色ID
     * @return 选中部门列表
     */
    List<String> selectOrganizeListByRoleId(Long roleId);


    /**
     * 校验组织是否有数据权限
     *
     * @param organizeId 组织id
     */
    void checkOrganizeDataScope(String organizeId);    /**


     /**
     * 新增组织结构
     * 
     * @param sysOrganize 组织结构
     * @return 结果
     */
    int insertSysOrganize(SysOrganize sysOrganize);

    /**
     * 修改组织结构
     * 
     * @param sysOrganize 组织结构
     * @return 结果
     */
    int updateSysOrganize(SysOrganize sysOrganize);

    /**
     * 批量删除组织结构
     * 
     * @param organizeIds 需要删除的组织结构主键集合
     * @return 结果
     */
    int deleteSysOrganizeByOrganizeIds(String[] organizeIds);

    /**
     * 删除组织结构信息
     * 
     * @param organizeId 组织结构主键
     * @return 结果
     */
    int deleteSysOrganizeByOrganizeId(String organizeId);
}
